#!/usr/bin/python
# -*- coding:UTF8 -*-

# 列表基本方法
# Python 中可以通过组合一些值得到多种 复合 数据类型。其中最常用的 列表 ，可以通过方括号括起、逗号分隔的一组值得到。
# 一个 列表 可以包含不同类型的元素，但通常使用时各个元素类型相同:
# list 支持索引操作。

we_chart_group = []
# 单个添加
we_chart_group.append("网民")
print(we_chart_group)
# 多个添加
we_chart_group.extend(["张三", "李四", "王五", "马六"])
we_chart_group.extend(["张三", "张三"])
print(we_chart_group)
# 指定位置插入数据
we_chart_group.insert(1, "刘备")
print(we_chart_group)
# 删除数据
we_chart_group.remove('网民')
print(we_chart_group)
we_chart_group.pop(0)
print(we_chart_group)
# 查找元素的索引
# we_chart_group.index("李四")
print(we_chart_group.index('李四'))
# 也可以指定位置开始查找
print(we_chart_group.index('张三', 3))
# 统计元素在list中的个数
print(we_chart_group.count('张三'))
# 修改元素值
we_chart_group[-1] = '汤蓓'
print(we_chart_group)
# 清空list数据
print(we_chart_group.clear())
# 复制列表
we_chart_group1 = we_chart_group.copy()
print(we_chart_group1)

# 元组的基本方法
# 一个元组由几个被逗号隔开的值组成
title = ('id', "标题", "步骤", "期望结果", 'id')
# 索引
print(title[0])
print(title[1:])  # 左闭有开区间通数学中的[ )
print(title[-2:])
# 统计
print(title.count("id"))

# 元组和列表的区别
# 1. 定义方式不同
# 2. 数据存放与支持方法不同
#   a. list 可以支持增删改查相关方法
#   b. tuple 只有 index， count方法
# 3. 使用场景不同
#   a. tuple 适合哪些定义之后数据不能再做修改的场景。

# set 集合
# Python也包含有 集合 类型。集合是由不重复元素组成的无序的集。它的基本用法包括成员检测和消除重复元素。
# 集合对象也支持像 联合，交集，差集，对称差分等数学运算。
basket1 = {'苹果', '香蕉', '梨', '苹果', '梨'}
print(basket1)
# 定义
is_in_basket1 = '新华社' in basket1
print(is_in_basket1)
basket2 = {'苹果', '香蕉', '香蕉', '西红柿', '茄子'}
print(basket2 & basket1)
print(basket2 | basket1)
print(basket2 - basket1)
print(basket2 ^ basket1)

basket3 = ['苹果', '香蕉', '梨', '苹果', '梨']
basket4 = ['苹果', '香蕉', '香蕉', '西红柿', '茄子']
print(type(basket3), type(basket4))
print(set(basket3) & set(basket4))

# 字典 dict
# 花括号或 set() 函数可以用来创建集合。注意：要创建一个空集合你只能用 set() 而不能用 {}，因为后者是创建一个空字典。
# 理解字典的最好方式，就是将它看做是一个 键: 值 对的集合，键必须是唯一的（在一个字典中）。一对花括号可以创建一个空字典：{} 。
# 另一种初始化字典的方式是在一对花括号里放置一些以逗号分隔的键值对，而这也是字典输出的方
user = {
    "name": "小明",
    "id": "xiaoming",
    "area": "shanghai_hongkou"
}
print(user['name'])
# 更改key的值
user['name'] = '小米'
print(user['name'])
# 新增
user['age'] = 19
print(user)
# 删除
del user['id']
print(user)
# 实例使用
testcase = []
case1 = {
    "id": 1,
    "title": "用户登录",
    "steps": ["导航到用户登录页面", "输入用户名test1密码123456"],
    "except_value": "登录成功"
}
case2 = {
    "id": 2,
    "title": "用户登录",
    "steps": ["导航到用户登录页面", "输入用户名空密码空"],
    "except_value": "登录失败"
}
case3 = {
    "id": 3,
    "title": "用户登录",
    "steps": ["导航到用户登录页面", "输入用户名空密码123456"],
    "except_value": "用户名不能为空"
}
testcase.extend([case1, case2, case3])
print(testcase)
# 1. 获取最后一个测试用例的最后一个测试步骤
print(testcase[-1]['steps'][-1])

# 数据类型的相互转换
# list  tuple set 相互转换
words = ["张三", "李四", "王五", "马六", "张三", "李四", "刘备"]
print(tuple(words))
print(set(words))
words = ("张三", "李四", "王五", "马六", "张三", "李四", "刘备")
print(list(words))
print(set(words))
words = {"张三", "李四", "王五", "马六", "张三", "李四", "刘备"}
print(list(words))
print(tuple(words))

# 字典类型转换
# 字典的数据结构 都是以 key:value 样式存在，所以在转换字典格式 需要注意数据。
user = dict([("name", "xiaoming"), ("age", "22"), ("work", "测开工程师")])
print(user)

key = ('id', 'name', 'work')
value = ('121', 'zhangsan', 'teacher')
ziped = zip(key, value)
print(dict(ziped), type(dict(ziped)))

# 遍历字典
user = {
    "id": "12",
    "name": "尼古拉斯赵四",
    "work": "father",
}
print(user.items())
# for k in user:
#     print(k, user[k])
for v, j in user.items():
    print(v, j)

key = ('id', 'title', 'steps', 'except_val')
value = (1, "用户登录", ['输入用户明test', '输入密码123456', '点击登录'], '登录成功')
print(dict(zip(key, value)))
